(function(){
    // 描述一个对象的类型
    type myType = {
        name:string
    }

    /**
     * 接口用来定义 一个类结构,用来定义一个类中应该包含哪些属性和方法
     * 同时接口也可以当初类型声明去使用
     * 接口中的所有属性都不能有实际的值
     * 接口只定义对象的结构，而不考虑实际值
     * 在接口中所有的方法都是抽象方法，抽象方法没有返回值，在子类调用接口的时候，必须重写此方法
     */

    interface myInterface {
        name:string
    }

    // const obj:myInterface = {
    //     name:'lll'
    // }

    interface myInterface1{
        length:number
    }
    
    // 这种是对的
     function demo<T extends myInterface>(a:T) {
        return a.name
    }
   /*  // 此时会报错，没有该属性
    function demo<myInterface>(a:myInterface) {
        return a.name
    }  */
    // const ha = demo([1,2,3])
    const ha = demo({name:'ha'})
    console.log(ha)
})()